package ru.kreda.webapp.client.event;

import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;

/**
 * Событие на показ или сокрытие панели в сплиттере.
 */
public class OpenHideSplitPanelEvent extends GwtEvent<OpenHideSplitPanelEvent.Handler> {

	/**
	 * Ключ соответсвует панели меню.
	 */
	public static final int KEY_MENU_PANEL = 0;

	/**
	 * Ключ соответсвует панели списку реестров.
	 */
	public static final int KEY_REGISTER_LIST_PANEL = 1;

	/**
	 * Интерфейс обработчика события {@link OpenHideSplitPanelEvent}.
	 */
	public interface Handler extends EventHandler {

		/**
		 * Вызывается при поступлении события
		 */
		void handle(OpenHideSplitPanelEvent event);

	}

	public static Type<OpenHideSplitPanelEvent.Handler> TYPE = new Type<OpenHideSplitPanelEvent.Handler>();
	private final int key;
	private final boolean visible;
	private final boolean enabled;

	/**
	 * Конструктор.
	 * 
	 * @param key
	 *            ключ, означающий к какой панели относится событие
	 * @param visible
	 *            признак отображения панели
	 * @param enabled
	 *            признак доступности панели
	 */
	public OpenHideSplitPanelEvent(int key, boolean visible, boolean enabled) {
		this.key = key;
		this.visible = visible;
		this.enabled = enabled;
	}

	/**
	 * Конструктор (для доступной панели).
	 * 
	 * @param key
	 *            ключ, означающий к какой панели относится событие
	 * @param visible
	 *            признак отображения панели
	 */
	public OpenHideSplitPanelEvent(int key, boolean visible) {
		this(key, visible, true);
	}

	/**
	 * Возвращает ключ, означающий к какой панели относится событие
	 */
	public int getKey() {
		return key;
	}

	/**
	 * Возвращает признак отображения панели
	 */
	public boolean isVisible() {
		return visible;
	}

	/**
	 * Возвращает признак доступности панели
	 */
	public boolean isEnabled() {
		return enabled;
	}

	@Override
	public Type<OpenHideSplitPanelEvent.Handler> getAssociatedType() {
		return TYPE;
	}

	@Override
	protected void dispatch(OpenHideSplitPanelEvent.Handler handler) {
		handler.handle(this);
	}

}
